"""Anonycoin --- Bitcoin simulator with anonymity throught group signature

Copyright (c) 2016 Daniel Pimentel <d4n1@member.fsf.org>

This file is part Anonycoin.

Anonycoin is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or (at
your option) any later version.

Anonycoin is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Anonycoin.  If not, see <http://www.gnu.org/licenses/>.
"""


class Blockchain:
    """Blockchain Bitcoin simulator."""

    def __init__(self, block, transaction, ip, timestamp, difficulty):
        """Constructor.
        block - current block header
        transaction - transaction in the current block
        ip - ip address
        timestamp - timestamp generated by mining
        difficulty - difficulty level generated by mining
        """
        self.block = block
        self.transaction = transaction
        self.ip = ip
        self.timestamp = timestamp
        self.difficulty = difficulty

    def blocking(self, simulation=0):
        """Make block Bitcoin writing Blockchain in CVS file.
        simulation - 0 (default Bitcoin) or 1 (with group signature)
        """
        if (simulation == 1):
            blockfile = "anonycoin.csv"
        else:
            blockfile = "bitcoin.csv"
        with open(blockfile, "a", encoding="utf-8") as f:
            f.write(str(self.block) +
                    "\t" +
                    str(self.transaction.inputs[0]) +
                    "\t" +
                    str(self.transaction.inputs[1]) +
                    "\t" +
                    str(self.transaction.outputs[0]) +
                    "\t" +
                    str(self.transaction.outputs[1]) +
                    "\t" +
                    str(self.ip) +
                    "\t" +
                    str(self.timestamp) +
                    "\t" +
                    str(self.difficulty) +
                    "\n")
